﻿Public Class Clientes

    Private oMaestra As New CMaestras
    Private idCliente As Integer
    Private idContacto As Integer = 0
    Private dtCliente As New DataTable
    Private dtContacto As New DataTable
    Public ciudadSeleccionada As String = "0"
    Public contadorContacto As Integer = 100000

    Private Sub Clientes_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.CargarClientes(True)
        Me.CargarCiudades()
        Me.tabCrear.Parent = Nothing
    End Sub

    Private Sub CargarClientes(ByVal refrescar As Boolean)
        Try
            'Si refrescar es tru se traen los datos desde la bd
            If (refrescar) Then
                Dim ds As New DataSet
                ds = Me.oMaestra.GetTabla(CMaestras.Tabla.Cliente)
                Me.dtCliente = ds.Tables(0).Copy
            End If

            If (Me.dtCliente.Rows.Count > 0) Then
                Me.grdCliente.DataSource = Nothing
                Me.grdCliente.Columns.Clear()
                Me.grdCliente.DataSource = Me.dtCliente

                Dim iconoEditar As New DataGridViewImageColumn()
                iconoEditar.ValuesAreIcons = False
                iconoEditar.Image = My.Resources.editar
                iconoEditar.HeaderText = "EDITAR"
                iconoEditar.Name = "Editar"
                Me.grdCliente.Columns.Add(iconoEditar)

                Dim iconoEliminar As New DataGridViewImageColumn()
                iconoEliminar.ValuesAreIcons = False
                iconoEliminar.Image = My.Resources.eliminar
                iconoEliminar.HeaderText = "ELIMINAR"
                iconoEliminar.Name = "Eliminar"
                Me.grdCliente.Columns.Add(iconoEliminar)

                Me.grdCliente.Columns("ID").Visible = False
                Me.grdCliente.Columns("NIT").Width = 55
                Me.grdCliente.Columns("CIUDAD").Width = 65
                Me.grdCliente.Columns("EDITAR").Width = 50
                Me.grdCliente.Columns("ELIMINAR").Width = 70
            Else
                Me.grdCliente.DataSource = Nothing
                Me.grdCliente.Columns.Clear()
                MessageBox.Show("No se encontraron clientes", "", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End If
        Catch ex As Exception
            MessageBox.Show("Ocurrió un error al cargar los clientes: " & ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End Try
    End Sub

    Public Sub CargarCiudades()
        Dim ds As New DataSet
        ds = Me.oMaestra.GetListadoCiudades()
        If (ds.Tables(0).Rows.Count > 0) Then
            Me.drpCiudad.DataSource = CUtil.AgregarRegistro(ds.Tables(0), "Todas...")
            Me.drpCiudad.ValueMember = ds.Tables(0).Columns(0).ColumnName
            Me.drpCiudad.DisplayMember = ds.Tables(0).Columns(1).ColumnName

            Me.drpCiudadBuscar.DataSource = ds.Tables(0)
            Me.drpCiudadBuscar.ValueMember = ds.Tables(0).Columns(0).ColumnName
            Me.drpCiudadBuscar.DisplayMember = ds.Tables(0).Columns(1).ColumnName

            If (Me.ciudadSeleccionada <> "0") Then
                Me.drpCiudad.SelectedValue = Me.ciudadSeleccionada
            End If
        End If
    End Sub

    Private Sub CargarContactos()
        If (Me.dtContacto.Rows.Count > 0) Then
            Me.grdContacto.DataSource = Nothing
            Me.grdContacto.Columns.Clear()
            Me.grdContacto.DataSource = Me.dtContacto

            Dim iconoEditar As New DataGridViewImageColumn()
            iconoEditar.ValuesAreIcons = False
            iconoEditar.Image = My.Resources.editar
            iconoEditar.HeaderText = "EDITAR"
            iconoEditar.Name = "Editar"
            Me.grdContacto.Columns.Add(iconoEditar)

            Dim iconoEliminar As New DataGridViewImageColumn()
            iconoEliminar.ValuesAreIcons = False
            iconoEliminar.Image = My.Resources.eliminar
            iconoEliminar.HeaderText = "ELIMINAR"
            iconoEliminar.Name = "Eliminar"
            Me.grdContacto.Columns.Add(iconoEliminar)

            Me.grdContacto.Columns("ID").Visible = False
            Me.grdContacto.Columns("EDITAR").Width = 50
            Me.grdContacto.Columns("ELIMINAR").Width = 65
        Else
            Me.grdContacto.DataSource = Nothing
            Me.grdContacto.Columns.Clear()
        End If
    End Sub

#Region "Eventos de grillas"

    Private Sub grdCliente_CellMouseEnter(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles grdCliente.CellMouseEnter
        '*** Coloca la manito cuando el mouse entra en las celdas de editar y eliminar
        If (Me.grdCliente.Columns(e.ColumnIndex).Name = "Editar" Or Me.grdCliente.Columns(e.ColumnIndex).Name = "Eliminar") Then
            Cursor = Cursors.Hand
        Else
            Cursor = Cursors.Default
        End If
    End Sub

    Private Sub grdCliente_CellMouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles grdCliente.CellMouseMove
        If (Me.grdCliente.Columns(e.ColumnIndex).Name = "Editar" Or Me.grdCliente.Columns(e.ColumnIndex).Name = "Eliminar") Then
            Cursor = Cursors.Hand
        Else
            Cursor = Cursors.Default
        End If
    End Sub

    Private Sub grdCliente_CellDoubleClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles grdCliente.CellDoubleClick
        '*** Permite editar o eliminar
        'Se obtiene la info del registro
        Dim id As Integer = Me.grdCliente.Rows(e.RowIndex).Cells("ID").Value

        Select Case Me.grdCliente.Columns(e.ColumnIndex).Name
            Case "Editar"
                Me.EditarCliente(id)
            Case "Eliminar"
                Me.EliminarCliente(id)
        End Select
    End Sub

    Private Sub grdContacto_CellMouseEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles grdContacto.CellMouseEnter
        '*** Coloca la manito cuando el mouse entra en las celdas de editar y eliminar
        If (Me.grdContacto.Columns(e.ColumnIndex).Name = "Editar" Or Me.grdContacto.Columns(e.ColumnIndex).Name = "Eliminar") Then
            Cursor = Cursors.Hand
        Else
            Cursor = Cursors.Default
        End If
    End Sub

    Private Sub grdContacto_CellMouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles grdContacto.CellMouseMove
        If (Me.grdContacto.Columns(e.ColumnIndex).Name = "Editar" Or Me.grdContacto.Columns(e.ColumnIndex).Name = "Eliminar") Then
            Cursor = Cursors.Hand
        Else
            Cursor = Cursors.Default
        End If
    End Sub

    Private Sub grdContacto_CellDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles grdContacto.CellDoubleClick
        '*** Permite editar o eliminar
        'Se obtiene la info del registro
        Dim id As Integer = Me.grdContacto.Rows(e.RowIndex).Cells("ID").Value

        Select Case Me.grdContacto.Columns(e.ColumnIndex).Name
            Case "Editar"                
                Me.idContacto = id
                Me.txtNombreContacto.Text = Me.grdContacto.Rows(e.RowIndex).Cells("CONTACTO").Value.ToString
                Me.txtTelefonoContacto.Text = Me.grdContacto.Rows(e.RowIndex).Cells("TELEFONO").Value.ToString
                Me.txtMailContacto.Text = Me.grdContacto.Rows(e.RowIndex).Cells("MAIL").Value.ToString
                Me.txtCargoContacto.Text = Me.grdContacto.Rows(e.RowIndex).Cells("CARGO").Value.ToString
            Case "Eliminar"
                Me.EliminarContacto(id)
        End Select
    End Sub

#End Region

    Private Sub EditarCliente(ByVal id As Integer)
        Me.Limpiar()
        Me.idCliente = id
        Me.tabCrear.Parent = Me.TabControl1
        Me.TabControl1.SelectedTab = Me.tabCrear

        Me.TraerDatosCliente(id)
    End Sub

    Private Sub EliminarCliente(ByVal id As Integer)
        Try
            If (MessageBox.Show("¿Realmente desea eliminar este cliente?", "Eliminar cliente", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes) Then
                Cursor = Cursors.WaitCursor
                Me.oMaestra.Eliminar(id, CMaestras.Tabla.Cliente)
                Cursor = Cursors.Default
                MessageBox.Show("El cliente ha sido eliminado", "Cliente eliminado", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End If
        Catch ex As Exception
            Cursor = Cursors.Default
            MessageBox.Show("NO se eliminó el cliente: " & ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End Try

        Me.CargarClientes(True)
    End Sub

    Private Sub EliminarContacto(ByVal id As Integer)
        Try
            If (MessageBox.Show("¿Realmente desea eliminar este contacto?", "Eliminar contacto", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes) Then
                Cursor = Cursors.WaitCursor
                Me.oMaestra.Eliminar(id, CMaestras.Tabla.Contacto)
                Cursor = Cursors.Default
                MessageBox.Show("El contacto ha sido eliminado", "Contacto eliminado", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End If
        Catch ex As Exception
            Cursor = Cursors.Default
            MessageBox.Show("NO se eliminó el contacto: " & ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End Try

        Me.TraerDatosCliente(Me.idCliente)
    End Sub

    Private Sub btnNuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNuevo.Click
        Me.Limpiar()
        Me.idCliente = 0
        Me.tabCrear.Parent = Me.TabControl1
        Me.TabControl1.SelectedTab = Me.tabCrear
        Me.TraerDatosCliente(0)
    End Sub

    Private Sub TabControl1_Selected(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TabControlEventArgs) Handles TabControl1.Selected
        'Si se selecciona el primer tab oculta el otro
        If e.TabPageIndex = 0 Then
            Me.tabCrear.Parent = Nothing
        End If
    End Sub

    Private Sub Limpiar()
        Me.idCliente = 0
        Me.txtNit.Text = ""
        Me.txtNombre.Text = ""
        Me.rbtnJuridico.Checked = True
        Me.rbtnNatural.Checked = False
        Me.drpCiudad.SelectedValue = "0"
        Me.txtActividadEconomica.Text = ""
        Me.txtDireccion.Text = ""
        Me.txtTelefono.Text = ""
        Me.txtFax.Text = ""
        Me.txtOrigenRecursos.Text = ""
        Me.LimpiarContacto()
    End Sub

    Private Sub LimpiarContacto()
        Me.idContacto = 0
        Me.txtNombreContacto.Text = ""
        Me.txtTelefonoContacto.Text = ""
        Me.txtMailContacto.Text = ""
        Me.txtCargoContacto.Text = ""
        Me.grdContacto.DataSource = Nothing
        Me.grdContacto.Columns.Clear()
        Me.dtContacto.Rows.Clear()
    End Sub

    Private Sub btnCancelar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancelar.Click
        Me.Limpiar()
        Me.TabControl1.SelectedTab = Me.tabListado
        Me.tabCrear.Parent = Nothing
    End Sub

    Private Sub TraerDatosCliente(ByVal id As Integer)
        Try
            'Trae los datos del usuario seleccionado
            Dim ds As New DataSet
            ds = Me.oMaestra.GetClienteById(id)
            If (ds.Tables(0).Rows.Count > 0) Then
                Me.txtNit.Text = ds.Tables(0).Rows(0)("NIT")
                Me.txtNombre.Text = ds.Tables(0).Rows(0)("NOMBRE")
                Me.drpCiudad.SelectedValue = ds.Tables(0).Rows(0)("IDCIUDAD")
                Me.ciudadSeleccionada = ds.Tables(0).Rows(0)("IDCIUDAD")
                Me.txtActividadEconomica.Text = ds.Tables(0).Rows(0)("ACTIVIDAD")
                Me.txtDireccion.Text = ds.Tables(0).Rows(0)("DIRECCION")
                Me.txtTelefono.Text = ds.Tables(0).Rows(0)("TELEFONO")
                Me.txtFax.Text = ds.Tables(0).Rows(0)("FAX")
                Me.txtOrigenRecursos.Text = ds.Tables(0).Rows(0)("ORIGENRECURSOS")
                If (ds.Tables(0).Rows(0)("TIPO").ToString = "JURIDICO") Then
                    Me.rbtnJuridico.Checked = True
                    Me.rbtnNatural.Checked = False
                Else
                    Me.rbtnJuridico.Checked = False
                    Me.rbtnNatural.Checked = True
                End If

            End If

            Me.dtContacto = ds.Tables(1).Copy
            Me.CargarContactos()
        Catch ex As Exception
            MessageBox.Show("Ocurrió un error al traer la información del cliente: " & ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End Try
    End Sub

    Private Sub btnListo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnListo.Click
        '*** Guarda en la bd la info que se esta editando o creando
        If (Me.Validar()) Then
            Try
                Cursor = Cursors.WaitCursor

                Dim direccion As String = ""                
                Dim actividad As String = ""
                Dim telefono As String = ""
                Dim fax As String = ""
                Dim origen As String = ""
                Dim tipo As String = ""

                If (Me.txtDireccion.Text <> "") Then
                    direccion = Trim(Me.txtDireccion.Text)
                End If
                If (Me.txtActividadEconomica.Text <> "") Then
                    actividad = Trim(Me.txtActividadEconomica.Text)
                End If
                If (Me.txtTelefono.Text <> "") Then
                    telefono = Trim(Me.txtTelefono.Text)
                End If
                If (Me.txtFax.Text <> "") Then
                    fax = Trim(Me.txtFax.Text)
                End If
                If (Me.txtOrigenRecursos.Text <> "") Then
                    origen = Trim(Me.txtOrigenRecursos.Text)
                End If
                If (Me.rbtnJuridico.Checked) Then
                    tipo = "JURIDICO"
                Else
                    tipo = "NATURAL"
                End If

                Dim arrResult As ArrayList = Me.oMaestra.ActualizarCliente(Me.idCliente, Trim(Me.txtNit.Text), Trim(Me.txtNombre.Text), CInt(Me.drpCiudad.SelectedValue), direccion, actividad, telefono, fax, origen, tipo)
                Me.idCliente = arrResult(1)

                'Recorre los contactos y los va actualizando
                Dim idCont As Integer = 0
                For i As Integer = 0 To Me.dtContacto.Rows.Count - 1
                    If (CInt(Me.dtContacto.Rows(i)("ID").ToString) < 100000) Then
                        idCont = CInt(Me.dtContacto.Rows(i)("ID").ToString)
                    Else
                        idCont = 0
                    End If
                    Me.oMaestra.ActualizarContacto(idCont, Me.idCliente, Trim(Me.dtContacto.Rows(i)("CONTACTO").ToString), Trim(Me.dtContacto.Rows(i)("TELEFONO").ToString), Trim(Me.dtContacto.Rows(i)("MAIL").ToString), Trim(Me.dtContacto.Rows(i)("CARGO").ToString))
                Next

                Cursor = Cursors.Default
                MessageBox.Show(arrResult(0).ToString, "Cliente", MessageBoxButtons.OK, MessageBoxIcon.Information)

                'Si esta abierto el formulario de las hijas
                If (My.Forms.Hijas.Visible) Then
                    My.Forms.Hijas.CargarClientes()
                End If
                If (My.Forms.HijasMaritimo.Visible) Then
                    My.Forms.HijasMaritimo.CargarClientes()
                End If
                If (My.Forms.HijasTercero.Visible) Then
                    My.Forms.HijasTercero.CargarClientes()
                End If
                If (My.Forms.HijasAereoExportacion.Visible) Then
                    My.Forms.HijasAereoExportacion.CargarClientes()
                End If
                If (My.Forms.Guias.Visible) Then
                    My.Forms.Guias.CargarClientes()
                End If

            Catch ex As Exception
                Cursor = Cursors.Default
                MessageBox.Show("Ocurrió un error al guardar los datos del cliente: " & ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            End Try

            Me.Limpiar()
            Me.TabControl1.SelectedTab = Me.tabListado
            Me.tabCrear.Parent = Nothing            
            Me.CargarClientes(True)
        End If
    End Sub

    Private Function Validar() As Boolean
        Dim mensaje As String = ""

        If (Trim(Me.txtNit.Text).Length = 0) Then
            mensaje += "- Debe escribir el NIT o cédula" & Chr(13)
        End If
        If (Trim(Me.txtNombre.Text).Length = 0) Then
            mensaje += "- Debe escribir el nombre del cliente" & Chr(13)
        End If
        If (Me.drpCiudad.SelectedValue = "0") Then
            mensaje += "- Debe seleccionar la ciudad" & Chr(13)
        End If

        If (mensaje.Length > 0) Then
            MessageBox.Show(mensaje, "Datos incompletos", MessageBoxButtons.OK, MessageBoxIcon.Information)
            Return False
        Else
            Return True
        End If
    End Function

    Private Function ValidarContacto() As Boolean
        Dim mensaje As String = ""

        If (Trim(Me.txtNombreContacto.Text).Length = 0) Then
            mensaje += "- Debe escribir el nombre del contacto" & Chr(13)
        End If

        If (mensaje.Length > 0) Then
            MessageBox.Show(mensaje, "Datos incompletos", MessageBoxButtons.OK, MessageBoxIcon.Information)
            Return False
        Else
            Return True
        End If
    End Function

    Private Sub btnBuscar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBuscar.Click
        Try
            Cursor = Cursors.WaitCursor
            Dim ds As New DataSet
            ds = Me.oMaestra.BuscarClientes(Trim(Me.txtNitBuscar.Text), Trim(Me.txtNombreBuscar.Text), CInt(Me.drpCiudad.SelectedValue))
            Me.dtCliente = ds.Tables(0).Copy
            Me.CargarClientes(False)

            Cursor = Cursors.Default
        Catch ex As Exception
            Cursor = Cursors.Default
            MessageBox.Show("Ocurrió un error al buscar los clientes: " & ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End Try
    End Sub

    Private Sub btnCrearCiudad_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCrearCiudad.Click
        'Abre el formulario de la maestra de las ciudades
        My.Forms.Ciudades.Show()
    End Sub

    Private Sub btnAgregarContacto_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAgregarContacto.Click
        '*** Agrega o edita el contacto a la tabla de contactos y recarga la grilla de los contactos
        If (Me.ValidarContacto()) Then
            Try
                Cursor = Cursors.WaitCursor
                'Si se esta editando un contacto lo modifica en la tabla
                If (Me.idContacto > 0) Then
                    For i As Integer = 0 To Me.dtContacto.Rows.Count - 1
                        If (Me.dtContacto.Rows(i)("ID").ToString = Me.idContacto.ToString) Then
                            Me.dtContacto.Rows(i)("CONTACTO") = Me.txtNombreContacto.Text
                            Me.dtContacto.Rows(i)("TELEFONO") = Me.txtTelefonoContacto.Text
                            Me.dtContacto.Rows(i)("MAIL") = Me.txtMailContacto.Text
                            Me.dtContacto.Rows(i)("CARGO") = Me.txtCargoContacto.Text
                        End If
                    Next
                Else
                    'Se esta agregando un nuevo contacto, se agrega a la tabla
                    Me.contadorContacto = Me.contadorContacto + 1
                    Dim dr As DataRow
                    dr = Me.dtContacto.NewRow
                    dr("ID") = Me.contadorContacto
                    dr("CONTACTO") = Me.txtNombreContacto.Text
                    dr("TELEFONO") = Me.txtTelefonoContacto.Text
                    dr("MAIL") = Me.txtMailContacto.Text
                    dr("CARGO") = Me.txtCargoContacto.Text
                    Me.dtContacto.Rows.Add(dr)
                End If
                Me.dtContacto.AcceptChanges()

                'Recarga la grilla de los contactos
                Me.CargarContactos()
                Me.txtNombreContacto.Text = ""
                Me.txtTelefonoContacto.Text = ""
                Me.txtMailContacto.Text = ""
                Me.txtCargoContacto.Text = ""

                Cursor = Cursors.Default                
            Catch ex As Exception
                Cursor = Cursors.Default
                MessageBox.Show("Ocurrió un error al agregar el contacto: " & ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            End Try

        End If

    End Sub
End Class